/*
 * AnimattedModelObject.h
 *
 *  Created on: 03.10.2012
 *      Author: caffeine
 */

#ifndef ANIMATTEDMODELOBJECT_H_
#define ANIMATTEDMODELOBJECT_H_

#include "ModelObject.h"
#include <animation/IAnimation.h>
#include <animation/IAnimationRecord.h>

namespace irr{
namespace object{
/***
 * @class AnimattedModelObject
 * Класс анимированной модели
 */
class AnimattedModelObject: public irr::object::ModelObject {
private:
	irr::animation::IAnimationRecord*currentAnimationRecord;
	irr::animation::IAnimation*animationGroup;
protected:
	virtual void on_setCurrentAnimation(irr::animation::IAnimationRecord*record)=0;
	virtual void on_setAnimationGroup(irr::animation::IAnimation*group)=0;
	virtual void on_load();
public:
	AnimattedModelObject(ContainerNodeObject*container,irr::animation::IAnimation*animationGroup,irr::IrrlichtDevice*device);
	virtual ~AnimattedModelObject();

	/***
	 * Устанавливает текущую анимацию. Должна быть одной из установленной группы анимаций
	 *
	 * @param record анимация
	 * @throw AnimationException вызывается тогда, когда анимация record не пренадлежит установленной анимационной группе
	 */
	virtual void setCurrentAnimation(irr::animation::IAnimationRecord*record);

	/***
	 * Возвращяет текущую анимацию
	 *
	 * @return текущая анимация
	 */
	virtual irr::animation::IAnimationRecord*getCurrentAnimation();

	/***
	 * Возвращяет установленную группу анимаций
	 *
	 * @return установленая группа анимаций
	 */
	virtual irr::animation::IAnimation*getAnimationGroup();

	/***
	 * Устанавливает группу анимаций
	 *
	 * @param group группа анимаций, которую нужно устанавить
	 */
	virtual void setAnimationGroup(irr::animation::IAnimation*group);
};

}//namespace object
}//namespace irr

#endif /* ANIMATTEDMODELOBJECT_H_ */
